﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack
{
    public partial class FrmLocalidad : Form
    {
        BLLLocalidad _BLLLocalidad = new BLLLocalidad();
        Localidad _miLocalidad;
        Acciones _accionActual;

        public FrmLocalidad()
        {
            InitializeComponent();
            _accionActual = Acciones.alta;
            seleccionarAccion();
            txtCodigoPostal.KeyPress += Utilidades.TextboxSoloNumeros_KeyPress;
        }

        public Localidad LocalidadSeleccionada
        {
            get
            {
                Localidad seleccionada = null;

                if (dgvLocalidades.SelectedRows.Count > 0)
                {
                    seleccionada = new Localidad();
                    seleccionada.IdLocalidad = (int)dgvLocalidades.SelectedRows[0].Cells["IdLocalidad"].Value;

                    BLLLocalidad bllLocalidad = new BLLLocalidad();
                    seleccionada = bllLocalidad.TraerLocalidad(seleccionada.IdLocalidad);
                }

                return seleccionada;
            }
        }

        void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }


        private void CargarDatosSeleccionados()
        {
            if (dgvLocalidades.SelectedRows.Count > 0 && _accionActual != Acciones.alta)
            {
                _miLocalidad = LocalidadSeleccionada;

                txtLocalidad.Text = _miLocalidad.Nombre;
                txtCodigoPostal.Text = _miLocalidad.CodigoPostal;
                cboProvincias.SelectedIndex = _miLocalidad.Provincia;
            }
        }

        private void CargarGrilla()
        {
            BLLLocalidad bllLocalidad = new BLLLocalidad();

            dgvLocalidades.DataSource = (from l in bllLocalidad.TraerLocalidades(txtBuscar.Text)
                                         select new
                                         {
                                             IdLocalidad = l.IdLocalidad,
                                             Nombre = l.Nombre,
                                             Provincia = ((Provincias)l.Provincia).ToString().Replace("_", " "),
                                             Prov = l.Provincia,
                                             CodigoPostal = l.CodigoPostal
                                         }).ToList();
        }

        private void CargarProvincia()
        {
            cboProvincias.Items.Clear();
            cboProvincias.Items.Add("-- Selecione Provincia --");

            foreach(string prov in Enum.GetNames(typeof(Provincias))){
                cboProvincias.Items.Add(prov.Replace("_", " "));
            }

            cboProvincias.SelectedIndex = 0;
        }

        private void seleccionarAccion()
        {
            switch(_accionActual){            
                case Acciones.alta:            
                    this.Text = "Nueva Localidad";
                    //btnGuardar.Text = "Guardar nuevo";
                    btnAgregar.Enabled = false;
                    btnEditar.Enabled = true;
                    btnRemover.Enabled = true;
                    _miLocalidad = new Localidad();
                    break;
                case Acciones.modificacion:
                    this.Text = "Modificar Localidad";
                    //btnGuardar.Text = "Guardar cambios";
                    btnEditar.Enabled = false;
                    btnRemover.Enabled = true;
                    btnAgregar.Enabled = true;
                    break;
                default:
                    break;
            }
        }

        private bool ValidarDatos()
        {
            bool estaOK = false;
            Utilidades.LimpiarErrores(this, errorLocalidades);
            estaOK = Utilidades.ValidarDatos(this, errorLocalidades);
            return estaOK;
        }


        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.alta;
            seleccionarAccion();

            Utilidades.LimpiarControles(gbDatos);
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.modificacion;
            CargarDatosSeleccionados();
            seleccionarAccion();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarDatos())
                {
                    _miLocalidad.CodigoPostal = txtCodigoPostal.Text;
                    _miLocalidad.Nombre = txtLocalidad.Text;
                    _miLocalidad.Provincia = cboProvincias.SelectedIndex;

                    switch (_accionActual)
                    {
                        case Acciones.alta:
                            _BLLLocalidad.CrearLocalidad(_miLocalidad);
                            Utilidades.LimpiarControles(gbDatos);
                            break;
                        case Acciones.modificacion:
                            _BLLLocalidad.ModificarLocalidad(_miLocalidad);
                            break;
                    }
                    MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    CargarGrilla();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
        
        private void btnRemover_Click(object sender, EventArgs e)
        {
            Localidad loc = LocalidadSeleccionada;

            if (MessageBox.Show(string.Format("¿Eliminar localidad {0}?", loc.Nombre), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                BLLLocalidad bllLocalidad = new BLLLocalidad();

                try
                {
                    bllLocalidad.EliminarLocalidad(loc);
                }
                catch (BLLMagiPackException ex)
                {
                    MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                
                CargarGrilla();
            }
        }
        
        private void dgvLocalidades_SelectionChanged(object sender, EventArgs e)
        {
            CargarDatosSeleccionados();
            btnRemover.Enabled = btnEditar.Enabled = dgvLocalidades.SelectedRows.Count > 0;
        }

        private void FrmLocalidad_Load(object sender, EventArgs e)
        {
            this.StartPosition = FormStartPosition.CenterScreen;
            CargarProvincia();
            CargarGrilla();
            cboProvincias.SelectedIndex = 0;
        }
    }
}
